using System;
using System.Data;
using System.Data.SqlClient;
using System.Collections.Generic;

namespace FrbaBus
{
    public abstract class RepositoryBase
    {
        static string NOMBRE_ESQUEMA = "TUVAS.";
        static string SERVER = "localhost\\SQLSERVER2008";
        static string USERNAME = "gd";
        static string PASSWORD = "gd2013";
        static string DATABASE = "GD1C2013";
        string connectionString = "Data Source=" + SERVER + ";" + "User ID=" + USERNAME + ";" + "Password=" + PASSWORD + ";" + "Initial Catalog=" + DATABASE;

        /**
         * Ejecuta el stored procedure que le pasamos como parametro, con el listado de parametros que le pasamos.
         */
        protected void ejecutarStoredProcedure (string nombreStoredProcedure, List<SqlParameter> parametros)
        {
            using (SqlConnection connection = new SqlConnection(connectionString)) {
                using (SqlCommand command = new SqlCommand()) {
                    connection.Open ();

                    command.Connection = connection;
                    command.CommandType = System.Data.CommandType.StoredProcedure;
                    command.CommandText = NOMBRE_ESQUEMA + nombreStoredProcedure;

                    agregarParametros (command.Parameters, parametros);

                    command.ExecuteReader ();

                    connection.Close ();
                }
            }
        }

        void agregarParametros (SqlParameterCollection parameters, List<SqlParameter> parametros)
        {
            foreach (SqlParameter cadaParametro in parametros) {
                parameters.Add (cadaParametro);
            }
        }

        /**
         * Ejecuta el stored procedure que le pasamos como parámetro y retorna un DataSet con los resultados
         * permitiendo asociarlo con un elemento de la vista como por ejemplo un CheckedListBox.
         */
        public DataSet obtenerDataSetParaVincularElementoVista (string nombreStoredProcedure)
        {
            DataSet dataSet = new System.Data.DataSet ();
            using (SqlConnection connection = new SqlConnection(connectionString)) {
                using (SqlCommand command = new SqlCommand()) {
                    connection.Open ();

                    command.Connection = connection;
                    command.CommandType = System.Data.CommandType.StoredProcedure;
                    command.CommandText = NOMBRE_ESQUEMA + nombreStoredProcedure;

                    SqlDataAdapter adapter = new SqlDataAdapter (command);
                    
                    adapter.Fill (dataSet);

                    connection.Close ();
                }
            }
            return dataSet;
        }

    }
}